/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package io;

import java.util.ArrayList;
import java.sql.Date;
import java.util.Iterator;

/**
 * Esta clase representa al Data Transfer Object de la entidad Couta
 * @author nahuel
 */
public class CuotaDTO {

    private int id;
    private int numero;
    private double monto;
    private Date fechaVencimiento;
    private ArrayList<PagoDTO> pagos;

    /**
     * Este es el constructor de la clase, inicializa los valores de todos los
     * atributos
     * @param id
     * @param numero
     * @param monto
     * @param fehaVencimiento 
     */
    public CuotaDTO(int id, int numero, double monto, Date fechaVencimiento) {
        this.id = id;
        this.numero = numero;
        this.monto = monto;
        this.fechaVencimiento = fechaVencimiento;
    }

    /**
     * Este es un constructor de la clase sin parámetros
     */
    public CuotaDTO() {
    }

    public Date getFechaVencimiento() {
        return fechaVencimiento;
    }

    public int getId() {
        return id;
    }

    public double getMonto() {
        return monto;
    }

    public int getNumero() {
        return numero;
    }

    public ArrayList<PagoDTO> getPagos() {
        return pagos;
    }

    public void setFechaVencimiento(Date fechaVencimiento) {
        this.fechaVencimiento = fechaVencimiento;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setMonto(double monto) {
        this.monto = monto;
    }

    public void setNumero(int numero) {
        this.numero = numero;
    }

    public void setPagos(ArrayList<PagoDTO> pagos) {
        this.pagos = pagos;
    }

    /**
     * Este método permite conocer el monto pagado de una cuota
     * @return monto pagado
     */
    public double getMontoPagado() {
        double montoPagado = 0;
        Iterator<PagoDTO> it = this.pagos.iterator();
        while (it.hasNext()) {
            PagoDTO pago = it.next();
            montoPagado = montoPagado + pago.getMontoPagado();
        }
        return montoPagado;
    }

    /**
     * Este método permite conocer el monto adeudado de una cuota
     * @return monto adeudado 
     */
    public double getMontoAdeudado() {
        return (this.monto - this.getMontoPagado());
    }

    /**
     * Este método permite conocer el estado de una cuota
     * @return Paga, Parcialmente paga o Impaga
     */
    public String getEstado() {
        double montoPagado = this.getMontoPagado();
        String estado = "Impaga";
        if (montoPagado > 0) {
            if (montoPagado >= this.monto) {
                estado = "Paga";
            } else {
                estado = "Parcialmente paga";
            }
        }
        return estado;
    }

    /**
     * Este método permite conocer la fecha del último pago de una cuota
     * @return 
     */
    public java.sql.Date getFechaUltimoPago() {
        java.sql.Date fecha = null;
        Iterator<PagoDTO> it = this.pagos.iterator();
        while (it.hasNext()) {
            PagoDTO pago = it.next();
            if (fecha == null) {
                fecha = pago.getFechaPago();
            } else {
                if (fecha.before(pago.getFechaPago())) {
                    fecha = pago.getFechaPago();
                }
            }
        }
        return fecha;
    }
}
